package sy4_Creational_Pattern.factory.method.other;
/*
 * 核心类TVFactory只负责产品的创建（提供静态方法），符合单一职责原则。
 * 待改进：增加其它电视机，仍然需要工厂类（if嵌套），这不符合OCP原则，将在工厂方法模式里得到解决。
 */

interface TV {
	public void play();  //电视机应该能播放
}

class HaierTV implements TV {
	@Override
	public void play() {
		System.out.println("海尔电视机播放中......");
	}

}
class HisenseTV implements TV {
	@Override
	public void play() {
		System.out.println("海信电视机播放中......");
	}
}

class TVFactory {
	//生产所需产品（某种品牌）的静态方法
	public static TV produceTV(String brand) throws Exception {
		if (brand.equalsIgnoreCase("Haier")) {
			System.out.println("电视机工厂生产海尔电视机！");
			return new HaierTV();
		} else if (brand.equalsIgnoreCase("Hisense")) {
			System.out.println("电视机工厂生产海信电视机！");
			return new HisenseTV();
		} else {
			//抛出错误品牌异常
			throw new Exception("对不起，暂不能生产该品牌电视机！");
		}
	}
}

public class Client {
	public static void main(String[] args) {
		try {
			//下面使用的方法produceTV()可能产生异常，可更改参数做运行测试
			//TV tv = TVFactory.produceTV("Hisense");
			TV tv = TVFactory.produceTV("Haier");
			tv.play();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
}
